/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.actions;

import com.ejb.TemasFachadaRemote;
import com.ejb.VotosFachadaRemote;
import com.entity.Temas;
import com.entity.Votos;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Calendar;


/**
 *
 * @author victor
 */

public class AltaTemasVotosAction extends org.apache.struts.action.Action {

    /* forward name="success" path="" */
    private static final String EXITO = "ExitoAltaTemasVotos";

    /**
     * This is the action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        TemasFachadaRemote TemasFachadaBean;
        VotosFachadaRemote VotosFachadaBean;
        AltaTemasVotosForm miForm;

        miForm = (AltaTemasVotosForm)form;

        String Interprete = miForm.getInterprete().toUpperCase();
        String Cancion = miForm.getCancion().toUpperCase();


        // Llamada al Enterprise Bean
        // Obtengo el tema si existe, si no existe creo uno nuevo
        TemasFachadaBean = (TemasFachadaRemote)new InitialContext().lookup("java:comp/env/TemasFachadaBean");

        Temas tem = null;
        tem=TemasFachadaBean.ExisteTema(Interprete, Cancion);
        request.getSession().setAttribute("Existe", "Ya existia el tema y no se agregó");
        if (tem==null)
        {
            request.getSession().setAttribute("Existe", "No existia el tema y se agregó");
            Temas miTema ;
            miTema= new Temas();
            miTema.setId(Long.MIN_VALUE);
            miTema.setNombreInt(Interprete);
            miTema.setCancion(Cancion);
            TemasFachadaBean.persist(miTema);
            // La vuelvo a recuperar para obtener la id asignada por el DBM
            tem=TemasFachadaBean.ExisteTema(Interprete, Cancion);
        }
        // Llamada al Enterprise Bean
        // Creo un voto con la referencia al Tema y al Usuario y lo persisto
        VotosFachadaBean = (VotosFachadaRemote)new InitialContext().lookup("java:comp/env/VotosFachadaBean");

        GregorianCalendar Calendario = new GregorianCalendar();
        GregorianCalendar CalendarioVoto = new GregorianCalendar();
        //dia de hoy
	int dia = Calendario.get(Calendar.DATE);
	int mes = Calendario.get(Calendar.MONTH)+1;
	int anio = Calendario.get(Calendar.YEAR);
        int DiaSemana = Calendario.get(Calendar.DAY_OF_WEEK); //Hoy

        // Convierto el dia de la semana para que sea 1 los lunes
        // y 7 los domingos
        if (DiaSemana == 1) DiaSemana=7; else DiaSemana=DiaSemana-1;
        Votos UltVoto = new Votos();
        Date FechaUltimoVoto = new Date();
        //Date FechaActual = new Date(today());
        //FechaUltimoVoto.
        //int DiaSemana = 0;
        int DiaSemanaVoto=0;
        long Diferencia=0;
        UltVoto = VotosFachadaBean.ObtenerUltimoVoto();
        request.getSession().setAttribute("cerrar", "NO HABIA VOTOS EN LA SEMANA");
        if (UltVoto!=null)  // Si ya hay un voto en la semana hago el calculo
        {
            FechaUltimoVoto = UltVoto.getFecha();
            CalendarioVoto.setTime(FechaUltimoVoto);
            DiaSemanaVoto = CalendarioVoto.get(Calendar.DAY_OF_WEEK);
            if (DiaSemanaVoto == 1) DiaSemanaVoto=7; else DiaSemanaVoto=DiaSemanaVoto-1;
            Diferencia = (Calendario.getTimeInMillis()-CalendarioVoto.getTimeInMillis())/86400000;

            // Requerimiento 7 (Cerrar votación)
            if (Diferencia<7 & DiaSemana >= DiaSemanaVoto)
            { // Continuo Votacion Actual
               request.getSession().setAttribute("cerrar", "SE CONTINUA VOTACION");
            } else // Cierro Votacion Actual y Abro una nueva
            {
                int exito=0;
                // Voto.tipo = 0 (historico) 1 (Anterior) 2 (Actual)
                exito =  VotosFachadaBean.CerrarVotacion();
               request.getSession().setAttribute("cerrar", "SE CIERRA LA VOTACION..."+exito+" votos actualizados");
            }
         }

        Votos miVoto = new Votos();
        miVoto.setId(Long.MIN_VALUE);

        long idUs = 0;
        long idTe = tem.getId();  // Obtengo el Id del tema
        String txtIdUs="";
        String txtIdTe="";

        // RESOLVER EXCEPCION DE DOBLE VOTO
        txtIdUs=(String)request.getSession().getAttribute("Id"); // Obtengo usuario

        idUs = Long.parseLong(txtIdUs); // Convierto a long

        miVoto.setIdTema(idTe);
        miVoto.setIdUsuario(idUs);
        miVoto.setTipo(2);  // 0-Voto Historico, 1-Semana Anterior, 2-Actual
        miVoto.setFecha(new Date(mes+"/"+dia+"/"+anio));

        VotosFachadaBean.persist(miVoto);
        int TotalVotosTema = VotosFachadaBean.ContarVotosTema(idTe);

        request.getSession().setAttribute("dia", dia);
        request.getSession().setAttribute("mes", mes);
        request.getSession().setAttribute("anio", anio);
        request.getSession().setAttribute("diasemana", DiaSemana);
        request.getSession().setAttribute("diasemanavoto", DiaSemanaVoto);
        request.getSession().setAttribute("fechaultimovoto", FechaUltimoVoto);
        request.getSession().setAttribute("diferencia", Diferencia);

        request.getSession().setAttribute("Interprete", Interprete);
        request.getSession().setAttribute("Cancion", Cancion);
        request.getSession().setAttribute("totalvotos", TotalVotosTema);

        return mapping.findForward(EXITO);
    }


}
